package com.enterpriseDigitalPlatform.controller.index;

import com.enterpriseDigitalPlatform.util.DateTimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class TestService {
    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public TestService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // 新加数据 填充创建更新时间
    public long testAdd(Test test) {
        test.setCreateAt(DateTimeUtil.getNowTimeStamp());
        test.setUpdateAt(DateTimeUtil.getNowTimeStamp());
        ArrayList<String> keyArr = new ArrayList<String>();
        ArrayList<String> placeArr = new ArrayList<String>();
        ArrayList<Object> valueArr = new ArrayList<Object>();
        if (test.getName() != null) {
            keyArr.add("name");
            placeArr.add("?");
            valueArr.add(test.getName());
        }
        keyArr.add("create_at");
        placeArr.add("?");
        valueArr.add(test.getCreateAt());
        keyArr.add("update_at");
        placeArr.add("?");
        valueArr.add(test.getUpdateAt());
        String sql = "insert into test(" + String.join(",", keyArr) + ") values(" + String.join(",", placeArr) + ")";
        Object[] paramsArray = new Object[valueArr.size()];
        paramsArray = valueArr.toArray(paramsArray);
        long row = jdbcTemplate.update(sql, paramsArray);
        // String sql = "insert into test(" + String.join(",", keyArr) + ") values(" + String.join(",", placeArr) + ") RETURNING id";
        // KeyHolder key = new GeneratedKeyHolder();
        // Map<String, Integer> map = new HashMap<String, Integer>();
        // Object[] finalParamsArray = paramsArray;
        // long row = jdbcTemplate.update(new PreparedStatementCreator() {
        //     @Override
        //     public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
        //         PreparedStatement ps = con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
        //         for (int i = 0; i < finalParamsArray.length; i++) {
        //             Object param = finalParamsArray[i];
        //             String typeName = param.getClass().getName();
        //             switch (typeName) {
        //                 case "java.lang.Integer":
        //                     ps.setInt(i + 1, (Integer) param);
        //                     break;
        //                 case "java.lang.Long":
        //                     ps.setLong(i + 1, (Long) param);
        //                     break;
        //                 case "java.lang.Double":
        //                     ps.setDouble(i + 1, (Double) param);
        //                     break;
        //                 case "java.lang.Float":
        //                     ps.setFloat(i + 1, (Float) param);
        //                     break;
        //                 case "java.lang.String":
        //                     ps.setString(i + 1, (String) param);
        //                     break;
        //                 default:
        //                     throw new IllegalArgumentException("Unsupported parameter type: " + typeName);
        //             }
        //         }
        //         return ps;
        //     }
        // }, key);
        // test.setId(Objects.requireNonNull(key.getKey()).longValue());
        return row;
    }

    // 编辑数据 填充更新时间
    // 删除数据 填充更新时间
    // 查询数据列表 根据查询条件拼接sql语句
    public List<Test> testList() {
        String sql = "SELECT * FROM test";
        List<Test> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Test.class));
        return list;
    }
    // 查询数据
}
